home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- public class Random {
- private long seed;
- private static final long multiplier = 25214903917L;
- private static final long addend = 11L;
- private static final long mask = (1L << 48) - 1L;
- private double nextNextGaussian;
- private boolean haveNextNextGaussian;
-
- public Random() {
- this(System.currentTimeMillis());
- }
-
- public Random(long var1) {
- this.haveNextNextGaussian = false;
- this.setSeed(var1);
- this.haveNextNextGaussian = false;
- }
-
- public synchronized void setSeed(long var1) {
- this.seed = (var1 ^ 25214903917L) & mask;
- }
-
- private synchronized int next(int var1) {
- long var2 = this.seed * 25214903917L + 11L & mask;
- this.seed = var2;
- return (int)(var2 >>> 48 - var1);
- }
-
- public int nextInt() {
- return this.next(32);
- }
-
- public long nextLong() {
- return ((long)this.next(32) << 32) + (long)this.next(32);
- }
-
- public float nextFloat() {
- int var1 = this.next(30);
- return (float)var1 / 1.0737418E9F;
- }
-
- public double nextDouble() {
- long var1 = ((long)this.next(27) << 27) + (long)this.next(27);
- return (double)var1 / (double)(1L << 54);
- }
-
- public synchronized double nextGaussian() {
- if (this.haveNextNextGaussian) {
- this.haveNextNextGaussian = false;
- return this.nextNextGaussian;
- } else {
- double var1;
- double var3;
- double var5;
- do {
- var1 = (double)2.0F * this.nextDouble() - (double)1.0F;
- var3 = (double)2.0F * this.nextDouble() - (double)1.0F;
- var5 = var1 * var1 + var3 * var3;
- } while(var5 >= (double)1.0F);
-
- double var7 = Math.sqrt((double)-2.0F * Math.log(var5) / var5);
- this.nextNextGaussian = var3 * var7;
- this.haveNextNextGaussian = true;
- return var1 * var7;
- }
- }
- }
-